home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 4_0 / DVIM72-M / STRING_R.C < prev    next >
C/C++ Source or Header  |  1990-03-25  |  4KB  |  146 lines

  1. #include "dvihead.h"
  2. #include "commands.h"
  3. #include "gendefs.h"
  4. #include "gblprocs.h"
  5. #include "m72.h"
  6. #include "egblvars.h"
  7.  
  8. /* -*-C-*- strchr.h */
  9. /*-->strchr*/
  10. /**********************************************************************/
  11. /******************************* strchr *******************************/
  12. /**********************************************************************/
  13.  
  14. #ifndef KCC_20
  15. #define KCC_20 0
  16. #endif
  17.  
  18. #ifndef IBM_PC_MICROSOFT
  19. #define IBM_PC_MICROSOFT 0
  20. #endif
  21.  
  22. #ifndef OS_VAXVMS
  23. #define OS_VAXVMS 0
  24. #endif
  25.  
  26.  
  27. #if    (KCC_20 | IBM_PC_MICROSOFT | OS_VAXVMS | OS_THINKC)
  28. #else
  29. char*
  30. strchr(s,c)    /* return address of c in s[], or (char*)NULL if not found. */
  31. register char *s;/* c may be NUL; terminator of s[] is included in search. */
  32. register char c;
  33. {
  34.     while ((*s) && ((*s) != c))
  35.     ++s;
  36.  
  37.     if ((*s) == c)
  38.     return (s);
  39.     else
  40.     return ((char*)NULL);
  41. }
  42. #endif
  43.  
  44. /* -*-C-*- strcm2.h */
  45. /*-->strcm2*/
  46. /**********************************************************************/
  47. /******************************* strcm2 *******************************/
  48. /**********************************************************************/
  49.  
  50.  
  51. /***********************************************************************
  52.  Compare strings (ignoring case), and return:
  53.     s1>s2:    >0
  54.     s1==s2:  0
  55.     s1<s2:    <0
  56. ***********************************************************************/
  57.  
  58. /* toupper() is supposed to work for all letters, but PCC-20 does it
  59. incorrectly if the argument is not already lowercase; this definition
  60. fixes that. */
  61.  
  62. #define UC(c) (islower(c) ? toupper(c) : c)
  63.  
  64. int
  65. strcm2(s1, s2)
  66. register char *s1, *s2;
  67.  
  68. {
  69.     while ((*s1) && (UC(*s1) == UC(*s2)))
  70.     {
  71.     s1++;
  72.     s2++;
  73.     }
  74.     return((int)(UC(*s1) - UC(*s2)));
  75. }
  76. #undef UC
  77.  
  78. /* -*-C-*- strid2.h */
  79. /*-->strid2*/
  80. /**********************************************************************/
  81. /******************************* strid2 *******************************/
  82. /**********************************************************************/
  83.  
  84. /* toupper() is supposed to work for all letters, but PCC-20 does it
  85. incorrectly if the argument is not already lowercase; this definition
  86. fixes that. */
  87.  
  88. #define UC(c) (islower(c) ? toupper(c) : c)
  89.  
  90. int
  91. strid2(string,substring)/* Return index (0,1,...) of substring in string */
  92. char string[];        /* or -1 if not found.  Letter case is IGNORED. */
  93. char substring[];
  94. {
  95.     register int k;    /* loop index */
  96.     register int limit;    /* loop limit */
  97.     register char *s;
  98.     register char *sub;
  99.  
  100.     limit = (int)strlen(string) - (int)strlen(substring);
  101.  
  102.     for (k = 0; k <= limit; ++k)/* simple (and slow) linear search */
  103.     {
  104.     s = &string[k];
  105.  
  106.     for (sub = &substring[0]; (UC(*s) == UC(*sub)) && (*sub); (++s, ++sub))
  107.         /* NO-OP */ ;
  108.  
  109.     if (*sub == '\0')    /* then all characters match */
  110.         return(k);        /* success -- match at index k */
  111.     }
  112.  
  113.     return(-1);            /* failure */
  114. }
  115.  
  116. /* -*-C-*- strrchr.h */
  117. /*-->strrchr*/
  118. /**********************************************************************/
  119. /****************************** strrchr *******************************/
  120. /**********************************************************************/
  121.  
  122. #if    (KCC_20 | IBM_PC_MICROSOFT | OS_VAXVMS | OS_THINKC)
  123. #else
  124. char*
  125. strrchr(s,c)    /* return address of last occurrence of c in s[], */
  126.         /* or (char*)NULL if not found.  c may be NUL; */
  127.         /* terminator of s[] is included in search. */
  128. register char *s;
  129. register char c;
  130. {
  131.     register char *t;
  132.  
  133.     t = (char *)NULL;
  134.     for (;;)        /* loop forever */
  135.     {
  136.     if (*s == c)
  137.         t = s;    /* remember last match position */
  138.     if (!*s)
  139.         break;    /* exit when NULL reached */
  140.     ++s;        /* advance to next character */
  141.     }
  142.     return (t);
  143. }
  144. #endif
  145.  
  146.